<?php
namespace app\admin\controller;
use think\Cache;
use app\admin\model\Admin as AdminModel;

//管理员管理类 只有超级管理员有此目录
class Admin extends Base
{
    /**
     * 管理员列表
     */
    public function adminLst()
    {
        $aid = input('aid'); //当前登录管理员的id

        if ($aid !== '1') {
            $info['code']    = '401';
            $info['message'] = '你没有此权限';
            echo displayJson($info);die;
        }

        $list = AdminModel::where('ad_id','neq',1)->field('ad_pwd',true)->order('ad_create_time DESC')->paginate(10);

        $info['code']    = '200';
        $info['data']    = $list;
        echo displayJson($info);die;
    }

    /**
     * 添加管理员 只有超级管理员有此权限
     */
    public function addAdmin()
    {
        $data = input('post.');

        //校验数据
        $validate = \think\Loader::validate('Admin');
        if(!$validate->check($data)){
            $info = array('code' => '400','message'=>$validate->getError());
            echo displayJson($info);die;
        }

        if (empty($data['aid']) || $data['aid'] !== '1') {
            $info['code']    = '401';
            $info['message'] = '非正常访问';
            echo displayJson($info);die;
        }

        $checkCode = Cache::get($data['email']);

        if (!$checkCode) {
            $info['code']    = '400';
            $info['message'] = '验证码失效，请重新获取';
            echo displayJson($info);die;
        }

        if (trim($data['code']) !== $checkCode) {
            $info['code']    = '400';
            $info['message'] = '验证码错误';
            echo displayJson($info);die;
        }

        $insert['ad_account']     = trim($data['ad_account']);
        $insert['ad_pwd']         = md5($data['password'].'SecretAdmin');
        $insert['ad_email']       = trim($data['email']);
        $insert['ad_create_time'] = $insert['ad_update_time'] = time();

        //插入数据库
        $res = db('admin',[],false)->insert($insert);

        if ($res) {
            $info['code']    = '200';
            $info['message'] = '添加管理员成功';
            echo displayJson($info);die;
        } else {
            $info['code']    = '400';
            $info['message'] = '添加管理员失败';
            echo displayJson($info);die;
        }
    }

    /**
     * 超级管理员编辑其他管理员
     */
    public function editAdmin()
    {
        $now_aid            = input('now_aid');//当前登录管理员id
        $aid                = input('aid'); //要修改的管理员id
        $data['ad_account'] = input('new_account');
        $data['ad_pwd']     = input('new_password');

        if ($now_aid != 1) {
            $info['code']    = '401';
            $info['message'] = '非正常访问';
            echo displayJson($info);die;
        }


        //根据管理员id查询此管理员
        $row = db('admin',[],false)->where('ad_id',$aid)->find();

        if (!$row) {
            $info['code']    = '400';
            $info['message'] = '此管理员不存在';
            echo displayJson($info);die;
        }

        if (empty($data['ad_account']) || empty($data['ad_pwd'])) {
            $info['code']    = '400';
            $info['message'] = '请完善表单信息';
            echo displayJson($info);die;
        }
        $data['ad_pwd'] = md5($data['ad_pwd'].'SecretAdmin');

        $res = db('admin',[],false)->where('ad_id',$aid)->update($data);

        if ($res) {
            $info['code']    = '200';
            $info['message'] = '修改成功';
            echo displayJson($info);die;
        } else {
            $info['code']    = '400';
            $info['message'] = '修改失败';
            echo displayJson($info);die;
        }
    }

    /**
     * 管理员修改密码
     */
    public function editPwd()
    {
        $data = input('post.');

        if (empty($data['ad_id'])) {
            $info['code']    = '401';
            $info['message'] = '重要参数缺失，系统自动退出';
            echo displayJson($info);die;
        }

        if (empty($data['ad_pwd'])) {
            $info['code']    = '400';
            $info['message'] = '新密码不能为空';
            echo displayJson($info);die;
        }

        if (empty($data['code'])) {
            $info['code']    = '400';
            $info['message'] = '请输入邮箱验证码';
            echo displayJson($info);die;
        }

        $email = db('admin',[],false)->where('ad_id',$data['ad_id'])->value('ad_email');

        $checkCode = Cache::get($email);

        if (!$checkCode) {
            $info['code']    = '400';
            $info['message'] = '验证码失效，请重新获取';
            echo displayJson($info);die;
        }

        if (trim($data['code']) !== $checkCode) {
            $info['code']    = '400';
            $info['message'] = '验证码错误';
            echo displayJson($info);die;
        }

        $data['ad_pwd']         = md5($data['ad_pwd'].'SecretAdmin');
        $data['ad_update_time'] = time();

        //执行更新
        $res = db('admin')->where('ad_id',$data['ad_id'])->update($data);

        if ($res >= 0) {
            //删除Redis数据
            Cache::rm($email);

            $info['code']    = '200';
            $info['message'] = '更新成功';
            echo displayJson($info);die;
        } else {
            $info['code']    = '400';
            $info['message'] = '更新失败';
            echo displayJson($info);die;
        }
    }

    /**
     * 删除管理员
     */
    public function delAdmin()
    {
        $aid = input('aid');
        $did = input('did'); //删除的管理员id

        if ($aid !== '1') {
            $info['code']    = '401';
            $info['message'] = '你没有此权限';
            echo displayJson($info);die;
        }

        $res = db('admin',[],false)->where('ad_id',$did)->delete();

        if ($res) {
            $info['code']    = '200';
            $info['message'] = '删除成功';
            echo displayJson($info);die;
        } else {
            $info['code']    = '400';
            $info['message'] = '删除失败';
            echo displayJson($info);die;
        }

    }

    /**
     * 发送邮件 添加管理员、管理员修改密码
     */
    public function sendEmailByAdmin()
    {
        $type   = input('type');
        $email  = input('email');

        $findAdmin = db('admin',[],false)->where('ad_email',$email)->find();

        $code      = make_Verification_Code(4);

        if ($type == 'add') {
            //添加管理员(账号唯一) 判断账号是否存在
            if ($findAdmin) {
                $info['code']    = '400';
                $info['message'] = '此账号已经存在，请更换后重试';
                echo displayJson($info);die;
            }

            $content = '【淘二货】正在为您开通管理员身份，此次操作的验证码为：<span style="font-size: 24px;font-weight: bold;"> '.$code.' </span>，请在10分钟内告知超级管理员。 <br/>超级管理员QQ：1298025852';

        } elseif ($type == 'edit') {
            //修改密码
            if (!$findAdmin) {
                $info['code']    = '400';
                $info['message'] = '此账号邮箱有误，请检查后重试';
                echo displayJson($info);die;
            }

            $content = '【淘二货】您正在修改密码，此次操作的验证码为：<span style="font-size: 24px;font-weight: bold;"> '.$code.' </span>，请在10分钟内完成验证。如非本人操作，请尽快联系超级管理员。 <br/>超级管理员QQ：1298025852';
        } else {
            $info['code']    = '401';
            $info['message'] = '标识异常';
            echo displayJson($info);die;
        }

        $send_data = array(
            'to_email'   =>$email,
            'content'    =>$content
        );

        $send      = sendEmail($send_data);

        if (!$send) {
            $info['code']    = '400';
            $info['message'] = '邮件发送失败，请稍后重试';
            echo displayJson($info);die;
        } else {
            $check_code = explode(' ',$content);

            // 设置redis
            $options = ['type'  => 'Redis']; //指定类型
            Cache::init($options);//初始化
            Cache::set($email,$check_code['4'],600); //redis key有效期为10分钟

            $info['code']         = '200';
            $info['message']      = '邮件已发送至'.$email.'请注意查收';
            echo displayJson($info);die;
        }
    }

}
